Node.js で Lambda から S3 に年月のフォルダを作成してみた

Node.js で Lambda から S3 に年月のフォルダを作成してみた

Node.js で Lambda から S3 に年月のフォルダを作成するコードを紹介します。検索しても意外とヒットしなかったので書いてみました。
Clock Icon2022.03.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。アノテーションの中村(誠)です。 今回は、Node.js で Lambda から S3 に年月のフォルダを作成するコードを書いてみたので紹介します。

対象読者

・Node.js を使用している方
AWS SDK for JavaScript の基本的な使用方法がわかる方
・Lambda の基本的な使用方法がわかる方
・プログラムから S3 に年月ごとのフォルダを作成したいと思っている方

使用する API

PutObject API を使用することで、フォルダを作成できます。

コード

const AWS = require("aws-sdk");
AWS.config.update({ region: "ap-northeast-1" });
AWS.config.apiVersions = {
  s3: "2006-03-01",
};

exports.handler = async () => {
  const date = new Date();
  const year = date.getFullYear();
  //月は 0 埋め 2 桁
  const month = `0${date.getMonth() + 1}`.slice(-2);

  const params = {
    Bucket: "your-bucket-name",
    Key: `${year}/${month}/`,
  };

  const s3 = new AWS.S3();
  try {
    // putObject でフォルダを作成
    await s3.putObject(params).promise();
  } catch (err) {
    console.log(err);
  }
};

解説

年月取得

const date = new Date();
const year = date.getFullYear();
//月は 0 埋め 2 桁
const month = `0${date.getMonth() + 1}`.slice(-2);

getFullYear()getMonth()で現在の年月を取得しています。 getMonth()は 0 始まりという仕様なので、現在の月に合わせるため、getMonth() + 1としています。

パラメーター指定

const params = {
  Bucket: "your-bucket-name",
  Key: `${year}/${month}/`,
};

"your-bucket-name"に使用したい S3 バケット名を入力します。 フォルダはyear/monthの形式で作成されるように指定しています。

フォルダ作成

const s3 = new AWS.S3();
try {
  // putObject でフォルダを作成
  await s3.putObject(params).promise();
} catch (err) {
  console.log(err);
}

putObjectにパラメーターを渡し、フォルダを作成します。 今回は戻り値が必要ないので取得していませんが、戻り値は ETag でした。 必要に応じて取得してください。

Lambda の設定

コードは適宜アップロードしてください。
・ランタイム
 Node.js 14.x

・必要な権限
 AWSLambdaBasicExecutionRole
 AmazonS3FullAccess (必要に応じて権限を絞ってください)

設定後にテスト実行すると、S3 にフォルダが作成されているはずです。

S3 コンソールで確認

S3 コンソールで確認してみましょう。

現在の年月でフォルダができていることが確認できました。 ファイルなどはアップロードしていないので、月フォルダの中身は空です。 必要に応じでログや生成したファイルなどをフォルダに PUT してください。

まとめ

今回は、Node.js で Lambda から S3 に年月のフォルダを作成するコードを紹介しました。 「検索すれば山ほど出てくるんだろう」と思って調べたら、意外なことにヒットしなかったので、それなら自分がと思って紹介しました。 EventBridge のスケジューリングと組み合わることで、毎月自動的にフォルダを作成するということも可能だと思います。 ご覧頂いた方の参考になれば幸いです。

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.